#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;
class Solution{
public:
	// 0,1,0,3,12 => 1,3,12,0,0
	// 先找出几个0，删除掉，然后在末尾添加
	void moveZeroes(vector<int>& nums) {
		auto i = nums.begin();
		int c =0;
		while(i != nums.end()){	
			if(*i == 0){
				i = nums.erase(i);
				c++;
			}else{
				i++;
			}
		}
		for(int j = 0; j < c ; j++){
			nums.push_back(0);
		}
    }
	// 0 1 0 3 12
	// i=j=0 i=1,j=0 
	
	void moveZeroes1(vector<int>& nums) {
		int i = 0; // 记录非0数据偏移
		int j = 0; // 记录0数据的偏移
		while(i < nums.size()){
			if(nums[i] != 0){
				nums[j] = nums[i];
				j++;
			}
			i++;
		}
		while(j<i){
			nums[j++] =0;
		}
	}
};

int main(){
	vector<int> nums = {0,1,0,3,12};
	// vector<int> nums = {0, 0, 1};
	Solution so;
	so.moveZeroes1(nums);
	for(auto i : nums){
		cout << i << " ";
	}
	cout << endl;
	return 0;
}